#include "gameselect.h"
#include "gamehall.h"    // 跳转返回到上一界面
#include "gameroom.h"    // 跳转进入下一界面

GameSelect::GameSelect(QWidget *parent) : QWidget(parent)
{
              /* 设置 该界面的属性 */
    /* ------------------------------------------------------------------------------------------------------------ */
    this->setWindowTitle("关卡选择");                 // 设计游戏窗口文字
    this->setWindowIcon(QIcon(":res/ico.png"));     // 设计游戏窗口图标
    this->setFixedSize(1200,900);                   // 设计游戏界面大小


            /* 该界面的内容有 1.三种模式选择  2.一个返回上一界面的按钮  3.一个查看历史战绩的按钮 */
    /* ------------------------------------------------------------------------------------------------------------ */
    //一个返回上一界面的按钮
    QPushButton *backBtn = new QPushButton(this);
    backBtn->setIcon(QIcon(":res/back.png"));
    backBtn->move(this->width() * 0.05,this->height() * 0.05);
    backBtn->setFixedSize(50,50);
    connect(backBtn,&QPushButton::clicked,[=](){
        this->close();          // 第二界面关闭或者隐藏（hide()）
        GameHall *gameHall = new GameHall;  // 创建新的第一界面
        gameHall->show();                   // 显示第一界面

        QSound::play(":res/clicked.wav");   // 记得每一次点击都要有点击音效
    });

    // 三种模式选择
    QPushButton *simpleBtn = new QPushButton(this);
    QPushButton *normalBtn = new QPushButton(this);
    QPushButton *complexBtn = new QPushButton(this);
    /* 设计文字按钮时，我们要考虑他们的 1.文本内容  2.文本格式(字体,大小等) 3.按钮位置 4.边界(边框问题等) */
    /* ------------------------------------------------------------------------------------------------------------ */
    QFont font("华文行楷",30);

    simpleBtn->setText("简单模式");
    normalBtn->setText("正常模式");
    complexBtn->setText("困难模式");

    simpleBtn->setFont(font);
    normalBtn->setFont(font);
    complexBtn->setFont(font);

    simpleBtn->move(this->width() * 0.1,this->height() * 0.8);
    normalBtn->move(this->width() * 0.3,this->height() * 0.8);
    complexBtn->move(this->width() * 0.5,this->height() * 0.8);

    simpleBtn->setStyleSheet("QPushButton{border:0px;}");
    normalBtn->setStyleSheet("QPushButton{border:0px;}");
    complexBtn->setStyleSheet("QPushButton{border:0px;}");

    GameRoom *gameRoom = new GameRoom;              // 每一次跳转第三界面都需要在对应的connect中创建一次，直接在connect外创建
    connect(simpleBtn,&QPushButton::clicked,[=](){
        this->close();
        //GameRoom *gameRoom = new GameRoom;
        gameRoom->setGeometry(this->geometry());    // 确保跳转后的大小是一致的

        //这里就是 影响不同关卡模式 的原因
         gameRoom->styleGameRoom(GameStyle::SIMPLE);// 控制游戏房间难度
         gameRoom->snakeMoveTimeout(300);

        gameRoom->show();
        // 显示简单模式界面(如果设计了 三种模式不同的话，后续需要在这里添加变量，用来区分 不同难度)

        QSound::play(":res/clicked.wav");   // 记得每一次点击都要有点击音效
    });

    connect(normalBtn,&QPushButton::clicked,[=](){
        this->close();
        //GameRoom *gameRoom = new GameRoom;
        gameRoom->setGeometry(this->geometry());    // 确保跳转后的大小是一致的

        //这里就是 影响不同关卡模式 的原因
        gameRoom->styleGameRoom(GameStyle::NORMAL);  // 控制游戏房间难度
        gameRoom->snakeMoveTimeout(200);

        // 显示简单模式界面(如果设计了 三种模式不同的话，后续需要在这里添加变量，用来区分 不同难度)

        QSound::play(":res/clicked.wav");   // 记得每一次点击都要有点击音效
    });

    connect(complexBtn,&QPushButton::clicked,[=](){
        this->close();
        //GameRoom *gameRoom = new GameRoom;
        gameRoom->setGeometry(this->geometry());    // 确保跳转后的大小是一致的

        //这里就是 影响不同关卡模式 的原因
        gameRoom->styleGameRoom(GameStyle::COMPLEX);
        gameRoom->snakeMoveTimeout(100);

        gameRoom->show();
        // 显示简单模式界面(如果设计了 三种模式不同的话，后续需要在这里添加变量，用来区分 不同难度)

        QSound::play(":res/clicked.wav");   // 记得每一次点击都要有点击音效
    });

    // 一个查看历史战绩的按钮
    QPushButton *hisBtn = new QPushButton(this);
    hisBtn->setText("历史战绩");
    hisBtn->setFont(font);
    hisBtn->move(this->width() * 0.7,this->height() * 0.8);
    hisBtn->setStyleSheet("QPushButton{border:0px;}");

    connect(hisBtn,&QPushButton::clicked,[=](){
        QSound::play(":res/clicked.wav");   // 记得每一次点击都要有点击音效

        /* 弹出一个新的widget窗口，在这个窗口中进行操作 */
        QWidget *newWidget = new QWidget;
        newWidget->setWindowTitle("历史战绩");
        newWidget->setWindowIcon(QIcon(":res/ico.png"));
        newWidget->setFixedSize(this->width() * 0.5,this->height() * 0.5);

        /* 在新窗口 widget 中创建 文本编辑器，进行对历史数据的查看 */
        QTextEdit *edit = new QTextEdit(newWidget);     // 注意引用头文件
        edit->setFixedSize(this->width() * 0.5,this->height() * 0.5);
        edit->setFont(font);                    // 这里的font是之前统一定义的，在文字按钮设计字体处定义的，不要迷糊
        // 接下来就是在 edit 中输出 历史战绩，怎么进行？
        // 我们首先要想办法得到这个 历史战绩。怎么得到？
        // 在游戏结束时我们可以得到的 积分 就是我们的历史成绩，我们可以将 积分 存在txt文本中，查看历史战绩时，就读取文本就好

        /* 从文本中读取的操作是怎样的呢？ */
        QFile file("D:/SHIMIR/Documents/Project/history.txt");      // 记得使用 / 作为文件分隔符 和 记得头文件使用
        file.open(QIODevice::ReadOnly);
        // open 的打开方式    QIODevice::ReadOnly / QIODevice::WriteOnly  / QIODevice::ReadWrite
        // 我们这里只需要读，不需要对其修改或写入

        // 文件打开后，我们要拿到里面的内容
        QTextStream in(&file);
        int data = in.readLine().toInt();               // 只读取一行

        // 拿到的内容，我们要放置在 edit 上显示出来
        edit->append("历史得分为： ");
        edit->append(QString::number(data));

        // 最后 我们要让新的窗口在 this 上显示出来
        newWidget->show();
    });
}

void GameSelect::paintEvent(QPaintEvent *event)
{
    /* 重写绘画对象 */
    QPainter painter(this);
    QPixmap pix(":res/game_select.png");
    painter.drawPixmap(0,0,this->width(),this->height(),pix);
}
